/**
 * 
 */
package projeto.modelo.repositorio;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import projeto.conexao.GerenciadorConexao;
import projeto.conexao.IGerenciadorConexao;
import projeto.erro.ConexaoException;
import projeto.erro.RepositorioException;
import projeto.modelo.to.Usuario;
/**
 * @author Thiago Evoa
 *
 */
public class RepositorioUsuario implements IRepositorioUsuario{
	private IGerenciadorConexao g;
	
	public RepositorioUsuario(){
		g = GerenciadorConexao.getInstancia();
	}

	public void salvar ( Usuario us ) throws ConexaoException, RepositorioException{
		
		Connection c = g.conectar();
		String sqlSalvar = "INSERT INTO usuario(funcionarios_Codigo,usuarios_Login,usuarios_Senha) VALUES(?,?,?)";
		
		try{
			PreparedStatement pstm = c.prepareStatement ( sqlSalvar );
			pstm.setInt ( 1, us.getFuncionarios_Codigo() );
			pstm.setString ( 2, us.getUsuarios_Login() );
			pstm.setString ( 3, us.getUsuarios_Senha() );
			pstm.executeUpdate();
			pstm.close();
		}catch ( SQLException ex ){
			throw new RepositorioException ( ex.getMessage() );
		}finally{
			g.desconectar ( c );
		}
	}
	
	public void excluir ( int funcionarios_Codigo ) throws ConexaoException, RepositorioException{
		
		Connection c = g.conectar();
		String sqlExcluir = "DELETE FROM usuario WHERE (funcionarios_Codigo = ?)";
		
		try{
			
			java.sql.PreparedStatement pstm = c.prepareStatement ( sqlExcluir );
			pstm.setInt ( 1, funcionarios_Codigo );
			pstm.executeUpdate();
			pstm.close();
		}catch ( SQLException ex ){
			
			throw new RepositorioException ( ex.getMessage() );
			
		}finally{
			
			g.desconectar ( c );
			
		}
	}
	
	public void alterar ( Usuario us) throws RepositorioException, ConexaoException {
		Connection c = g.conectar();
		String sqlAlterar =  "UPDATE Usuarios set (?,?) WHERE funcionarios_Codigo (?)";
		
		try{
			
			java.sql.PreparedStatement pstm = c.prepareStatement ( sqlAlterar );
			pstm.setString ( 1, us.getUsuarios_Login() );
			pstm.setString ( 1, us.getUsuarios_Senha() );
			pstm.executeUpdate();
			pstm.close();
		}catch ( SQLException ex ){
			
			throw new RepositorioException ( ex.getMessage() );
			
		}finally{
			
			g.desconectar ( c );
			
		}
	}
	
	public Usuario consultar ( int funcionarios_Codigo) throws ConexaoException, RepositorioException{
		Usuario us = null;
		Connection c = g.conectar();
		String sqlConsulta = "SELECT us.funcionarios_Codigo,us.usuarios_Login,us.usuarios_Senha FROM Usuarios AS us WHERE (us.funcionarios_Codigo = ? )";
		
		try{
			
			PreparedStatement pstm = c.prepareStatement ( sqlConsulta );
			pstm.setInt( 1, funcionarios_Codigo);
			ResultSet rs = pstm.executeQuery();
			
			if ( rs.next() ){
				us = new Usuario();
				us.setFuncionarios_Codigo ( funcionarios_Codigo );
				
			}
		}catch(SQLException e){
			
			throw new RepositorioException ( e.getMessage());
			
		}finally{
			
			g.desconectar(c);
			
		}return us;
	}
	   
    public Collection <Usuario> listar( int funcionarios_Codigo) throws ConexaoException,RepositorioException {
        ArrayList <Usuario> lista = new ArrayList <Usuario>();
        Usuario us;
        Connection c = g.conectar();
        String sqlLista = "SELECT funcionarios_Codigo,usuarios_Login,usuarios_Senha FROM Usuarios";
        try{
        	
            Statement stm = c.createStatement();
            ResultSet rs = stm.executeQuery(sqlLista);
            
            while( rs.next() ){
            	
                us = new Usuario();
                us.setFuncionarios_Codigo( rs.getInt( "funcionarios_Codigo" ) );
                us.setUsuarios_Login( rs.getString( "usuarios_Login" ) );
                us.setUsuarios_Senha( rs.getString( "usuarios_Senha" ) );
                lista.add( us );
                
            } return lista;
        } catch( SQLException e ) {
        	
            throw new RepositorioException(e);
            
        } finally {
        	
            g.desconectar( c );
            
        }
    }
}
